package com.vshining.grame

import org.grails.databinding.BindingFormat

class Menu {
    String id = UUID.randomUUID().toString()
    String name

    String target;   //动作  grails:controllers:$controllerName:$actionName
    int index;
    int level;
    Menu preMenu;  // previous menu
    SortedSet subMenus
    static hasMany = [subMenus: Menu]
    static belongsTo = [Menu]

    @BindingFormat('yyyy-MM-dd HH:mm:ss')
    // 绑定数据以服务器时区为准，时区转换由前台进行
    Date dateCreated
    @BindingFormat('yyyy-MM-dd HH:mm:ss')
    // 绑定数据以服务器时区为准，时区转换由前台进行
    Date lastUpdated

    static constraints = {
        //字符、数字或下划线开头，点号只能分隔字符或数字，其他内容可由字符、数字、下划线、减号组成，但必须以字符、数字或下划线结束。
        id bindable: true, matches: /^[\w\d_]+(?:(?:[\w\d].[\w\d])?[\w\d_-]+[\w\d_])*/
        // \/:*?"<>|以及控制字符不能作为名称
        name nullable: false, blank: false, matches: /[^\\\/:*?"<>|\x00-\x1F\x7F]+/
        level range: 1..10, nullable: true
        target nullable: true;
        preMenu nullable: true;
        subMenus lazy: false; nullable: true;
    }

    static mapping = {
        id generator: 'assigned'
        version column: "VERSION"
        name column: "MENU_NAME"
        level column: "MENU_LEVEL"
        index column: "MENU_INDEX"
        target column: "MENU_TARGET"
        preMenu column: "PRE_MENU_ID"
    }

}
